home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / byt0187b.arc / MODE.ASM < prev    next >
Assembly Source File  |  1986-10-09  |  2KB  |  54 lines

  1. ;
  2. ;MODE.ASM, AN ASSEMBLY LANGUAGE PROGRAM WHICH WILL ALLOW
  3. ;SCREEN MODE CHANGES FROM THE SYSTEM LEVEL ON IBM PC/AT/XT
  4. ;AND COMPATIBLE SYSTEMS EQUIPPED WITH AN EGA BOARD.
  5. ;
  6. ;ENTER THE PROGRAM, ASSEMBLE, AND LINK TO OBTAIN THE .EXE FILE.
  7. ;
  8. MYDATA       SEGMENT PARA 'DATA'
  9. MESSAGE    DB       "Enter the screen mode desired (in Hexadecimal): $"
  10. MYDATA       ENDS
  11.  
  12. MYCODE       SEGMENT PARA 'CODE     ;DEFINE CODE SEG. FOR MASM
  13. MYPROC       PROC    FAR          ;PROCEDURE IS NAMED MYPROC
  14.        ASSUME  CS:MYCODE,DS:MYDATA
  15.        PUSH    DS          ;SAVE LOCATION OF DS REG.
  16.        SUB       AX,AX      ;GET A ZERO IN AX
  17.        PUSH    AX          ;SAVE ZERO ON STACK, TOO
  18.        MOV       AX,MYDATA      ;GET DATA LOCATION IN AX
  19.        MOV       DS,AX      ;PUT IT IN DS REGISTER
  20.  
  21.        LEA       DX,MESSAGE      ;PRINT MESSAGE TO SCREEN
  22.        MOV       AH,9
  23.        INT       21H
  24.  
  25.        MOV       DL,0
  26. DIGIT:       MOV       AH,01      ;PREPARE TO READ KEY INPUT
  27.        INT       21H
  28.        SUB       AL,30H      ;CONVERT FROM ASCII TO HEX DIGIT
  29.        CMP       AL,0       ;IS NUMBER >=0?
  30.        JL       DOIT       ;IF LOWER, MAKE JUMP FOR MODE SWITCH
  31.        CMP       AL,9       ;IS NUMBER <=9?
  32.        JLE       ACCEPT      ;IF SO, NUMBER IN 0-9 RANGE - ACCEPT IT
  33.        SUB       AL,7       ;IF NOT 0-9, IS IT A LETTER (A TO F)?
  34.        CMP       AL,0       ;CHECK FOR "A"
  35.        JL       DOIT       ;IF NOT, QUIT PROCESS
  36.        CMP       AL,06H      ;CHECK FOR "F"?
  37.        JG       DOIT       ;IF NOT, MAKE JUMP FOR MODE SWITCH
  38. ACCEPT:    MOV       CL,04H      ;PREPARE TO ACCUMULATE UP TO TWO DIGITS
  39.        SAL       DL,CL      ;ROTATE DL CONTENTS ONE "DIGIT" TO LEFT
  40.        ADD       DL,AL      ;ADD IN NEW "DIGIT"
  41.        JMP       DIGIT      ;ANOTHER DIGIT?
  42.  
  43. DOIT:       MOV       AL,DL      ;PREPARE TO SWITCH SCREEN MODES
  44.        MOV       AH,0
  45.        INT       10H          ;CALL INTERRUPT
  46.  
  47.        RET              ;RETURN CONTROL TO DOS
  48. MYPROC       ENDP           ;END PROCEDURE NAMED MYPROC
  49. MYCODE       ENDS           ;END CODE SEGMENT NAMED MYCODE
  50.  
  51.        END              ;END WHOLE PROGRAM
  52.  
  53.   ENDP           ;END PROCEDURE NAMED MYPROC
  54. MYCODE       ENDS           ;